<?php


/**
 * 风格dao.
 *
 * @author Shi Long <long.shi@alibaba-inc.com>
 * @copyright ©2003-2103 phpwind.com
 * @license http://www.windframework.com
 *
 * @version $Id: PwStyleDao.php 18955 2012-10-09 07:42:19Z long.shi $
 */
class PwStyleDao extends PwBaseDao
{
    protected $_pk = 'app_id';
    protected $_table = 'style';
    protected $_dataStruct = array('app_id', 'iscurrent', 'style_type', 'name', 'alias', 'logo', 'author_name', 'author_icon', 'author_email', 'website', 'version', 'pwversion', 'created_time', 'modified_time', 'description');

    /**
     * 添加.
     *
     * @param array $data
     *
     * @return bool
     */
    public function addStyle($data)
    {
        return $this->_add($data, false);
    }

    /**
     * 修改.
     *
     * @param int   $styleid
     * @param array $data
     *
     * @return bool
     */
    public function updateStyle($styleid, $data)
    {
        return $this->_update($styleid, $data);
    }

    /**
     * 删除.
     *
     * @param int $styleid
     *
     * @return booelan
     */
    public function deleteStyle($styleid)
    {
        return $this->_delete($styleid);
    }

    /**
     * 统计风格数.
     *
     * @return int
     */
    public function countByType($type = 'site')
    {
        $sql = $this->_bindTable('SELECT COUNT(*) FROM %s WHERE `style_type` = ?');

        return $this->getConnection()->createStatement($sql)->getValue(array($type));
    }

    /**
     * 获取当前风格
     *
     * @return array
     */
    public function getCurrentStyleByType($type = 'site')
    {
        $sql = $this->_bindTable('SELECT * FROM %s WHERE `iscurrent` = 1 AND `style_type` = ?');

        return $this->getConnection()->createStatement($sql)->getOne(array($type));
    }

    /**
     * 获取风格列表.
     *
     * @param int    $offset
     * @param int    $limit
     * @param string $orderBy
     *
     * @return array
     */
    public function getStyleListByType($type = 'site', $num = 10, $start = 0)
    {
        $sql = $this->_bindSql(
            'SELECT * FROM %s WHERE `style_type` = ? ORDER BY `iscurrent` DESC %s',
            $this->getTable(), $this->sqlLimit($num, $start));

        return $this->getConnection()->createStatement($sql)->queryAll(array($type), $this->_pk);
    }

    /**
     * 获取所有风格
     *
     * @param string $type
     *
     * @return array
     */
    public function getAllStyles($type = 'site')
    {
        $sql = $this->_bindTable('SELECT * FROM %s WHERE `style_type` = ?');

        return $this->getConnection()->createStatement($sql)->queryAll(array($type), $this->_pk);
    }

    /**
     * 获取风格详细信息.
     *
     * @param int $styleid
     *
     * @return array
     */
    public function getStyle($styleid)
    {
        return $this->_get($styleid);
    }

    /**
     * 根据风格目录查找风格
     *
     * @param array|string $package
     */
    public function fetchStyleByAliasAndType($packages, $type = 'site', $index = 'app_id')
    {
        is_array($packages) || $packages = array($packages);
        $sql = $this->_bindSql('SELECT * FROM %s WHERE `alias` IN %s AND style_type = ?', $this->getTable(),
            $this->sqlImplode($packages));

        return $this->getConnection()->createStatement($sql)->queryAll(array($type), $index);
    }

    /**
     * 根据ID查找App应用注册信息，返回app数据.
     *
     * @param string $appId
     *
     * @return array
     */
    public function findByAppId($appId)
    {
        if (!$appId) {
            return false;
        }
        $sql = $this->_bindTable('SELECT * FROM %s ').' WHERE app_id=?';

        return $this->getConnection()->createStatement($sql)->getOne(array($appId));
    }
}
